// pages/process-users/process-users.js
const app = getApp()
const api = require('../../utils/api.js')
const pagePermission = require('../../utils/pagepermission.js')

Page({
  data: {
    loading: true,
    processList: [], // 工序列表
    selectedProcessIndex: -1, // 选中的工序索引
    processUsers: [], // 当前工序的关联员工
    showAddModal: false, // 是否显示添加员工弹窗
    availableUsers: [], // 可添加的员工列表
    selectedAvailableUsers: [], // 选中的可添加员工
    searchKeyword: '' // 搜索关键词
  },

  onLoad() {
    // 页面权限检查
    if (!pagePermission.requirePagePermission('pages/process-users/process-users')) {
      return
    }
    
    this.loadProcessList()
  },

  // 加载工序列表
  loadProcessList() {
    this.setData({ loading: true })
    
    api.getProcessList().then(res => {
      this.setData({
        processList: res.data.list || [],
        loading: false
      })
    }).catch(err => {
      console.error('加载工序列表失败:', err)
      this.setData({ loading: false })
      wx.showToast({
        title: '加载工序列表失败',
        icon: 'none'
      })
    })
  },

  // 工序选择
  onProcessChange(e) {
    const index = e.detail.value
    const process = this.data.processList[index]
    
    this.setData({
      selectedProcessIndex: index,
      processUsers: []
    })
    
    if (process) {
      this.loadProcessUsers(process.id)
    }
  },

  // 加载工序关联的员工
  loadProcessUsers(processId) {
    api.getProcessUsers(processId).then(res => {
      this.setData({
        processUsers: res.data || []
      })
    }).catch(err => {
      console.error('加载工序员工失败:', err)
      wx.showToast({
        title: '加载员工列表失败',
        icon: 'none'
      })
    })
  },

  // 显示添加员工弹窗
  showAddUserModal() {
    this.loadAvailableUsers()
    this.setData({
      showAddModal: true,
      selectedAvailableUsers: [],
      searchKeyword: ''
    })
  },

  // 隐藏添加员工弹窗
  hideAddUserModal() {
    this.setData({
      showAddModal: false
    })
  },

  // 阻止事件冒泡
  stopPropagation() {
    // 空函数，用于阻止事件冒泡
  },

  // 加载可添加的员工列表
  loadAvailableUsers() {
    const processId = this.data.processList[this.data.selectedProcessIndex].id
    
    api.getAvailableUsers(processId).then(res => {
      this.setData({
        availableUsers: res.data || []
      })
    }).catch(err => {
      console.error('加载可添加员工失败:', err)
      wx.showToast({
        title: '加载员工列表失败',
        icon: 'none'
      })
    })
  },

  // 搜索输入
  onSearchInput(e) {
    const keyword = e.detail.value
    this.setData({
      searchKeyword: keyword
    })
    
    // 这里可以实现实时搜索功能
    // 暂时简单过滤
    this.filterAvailableUsers(keyword)
  },

  // 过滤可添加的员工
  filterAvailableUsers(keyword) {
    if (!keyword) {
      this.loadAvailableUsers()
      return
    }
    
    const filteredUsers = this.data.availableUsers.filter(user => 
      user.nickname.includes(keyword) || user.mobile.includes(keyword)
    )
    
    this.setData({
      availableUsers: filteredUsers
    })
  },

  // 选择可添加的员工
  onAvailableUserSelect(e) {
    const user = e.currentTarget.dataset.user
    const selectedUsers = [...this.data.selectedAvailableUsers]
    const index = selectedUsers.indexOf(user.id)
    
    if (index > -1) {
      selectedUsers.splice(index, 1)
    } else {
      selectedUsers.push(user.id)
    }
    
    this.setData({
      selectedAvailableUsers: selectedUsers
    })
  },

  // 确认添加员工
  confirmAddUsers() {
    const processId = this.data.processList[this.data.selectedProcessIndex].id
    const userIds = this.data.selectedAvailableUsers
    
    if (userIds.length === 0) {
      wx.showToast({
        title: '请选择要添加的员工',
        icon: 'none'
      })
      return
    }
    
    api.addProcessUsers(processId, userIds).then(res => {
      wx.showToast({
        title: '添加成功',
        icon: 'success'
      })
      
      // 重新加载员工列表
      this.loadProcessUsers(processId)
      this.hideAddUserModal()
    }).catch(err => {
      console.error('添加员工失败:', err)
      wx.showToast({
        title: err.msg || '添加失败',
        icon: 'none'
      })
    })
  },

  // 移除员工
  removeUser(e) {
    const userId = e.currentTarget.dataset.userId
    const processId = this.data.processList[this.data.selectedProcessIndex].id
    
    wx.showModal({
      title: '确认移除',
      content: '确定要移除该员工吗？',
      success: (res) => {
        if (res.confirm) {
          api.removeProcessUser(processId, userId).then(res => {
            wx.showToast({
              title: '移除成功',
              icon: 'success'
            })
            
            // 重新加载员工列表
            this.loadProcessUsers(processId)
          }).catch(err => {
            console.error('移除员工失败:', err)
            wx.showToast({
              title: err.msg || '移除失败',
              icon: 'none'
            })
          })
        }
      }
    })
  }
})
